laptop side:
Make sure you have the pyserial library installed. You can install it using pip using the PyCharm terminal tab:
pip install pyserial
Python code:
Code:
import serial
import time
if __name__ == '__main__':
ser = serial.Serial('COM3', 9600, timeout=1) # Adjust 'COM3' to your port
num_readings = 10
for _ in range(num_readings):
if ser.in_waiting > 0:
line = ser.readline().decode('utf-8').rstrip()
print(line)
time.sleep(1) # Delay between readings
ser.close()
ser.readline().decode('utf-8').rstrip() reads one line of data from the serial buffer,
which corresponds to the last complete line sent from the Arduino. Each call to ser.readline()
retrieves the next line of data available in the buffer, so if the Arduino is continuously
sending data, this command will read the most recent line that has been fully transmitted.
Arduino side skill code:
DiTemperature.h :
Code:
#ifndef DiTemperature_H
#define DiTemperature_H
// using Arduino hardware codes outside main:
#include <Arduino.h>
#include "LivinGrimoireLight.h"
/*
lm35 sketch
prints the temperature to the serial monitor
*/
class DiTemperature : public Skill {
private:
const int inPin = 0; // analog pin
public:
DiTemperature();
virtual void inOut(byte ear, byte skin, byte eye);
};
#endif
DiTemperature.c++ code:
Code:
#include <Arduino.h>
#include "DiTemperature.h"
#include "LivinGrimoireLight.h"
DiTemperature::DiTemperature()
{
Serial.begin(9600); // Start serial communication at 9600 baud
}
void DiTemperature::inOut(byte ear, byte skin, byte eye)
{
int value = analogRead(inPin);
float millivolts = (value / 1024.0) * 5000;
float celsius = millivolts / 10;
Serial.print(celsius);
delay(1000);
// Serial.print(" \xC2\xB0"); // shows degree symbol
// Serial.println("C");
}
Arduino main code, with the temperature skill:
Code:
#include "DiTemperature.h"
#include "LivinGrimoireLight.h"
Chobit* c1;
void setup() {
Skill* s2 = new DiTemperature(); // servo skill created
c1 = new Chobit();
c1->addSkill(s2);
}
void loop() {
c1->think(0, 0, 0);
}