Separate state-handling and motor code into separate files, fix conflict between motor and display
This commit is contained in:
		
							parent
							
								
									6cf254fa55
								
							
						
					
					
						commit
						228ccc7d04
					
				@ -1,51 +1,37 @@
 | 
				
			|||||||
#include <Arduino_MKRIoTCarrier.h>
 | 
					#include <Arduino_MKRIoTCarrier.h>
 | 
				
			||||||
#include <WiFiNINA.h>
 | 
					#include <WiFiNINA.h>
 | 
				
			||||||
#include <ArduinoMqttClient.h>
 | 
					#include <ArduinoMqttClient.h>
 | 
				
			||||||
 | 
					#include "state.h"
 | 
				
			||||||
 | 
					#include "motor.h"
 | 
				
			||||||
#include "secrets.h"
 | 
					#include "secrets.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MKRIoTCarrier carrier;
 | 
					MKRIoTCarrier carrier;
 | 
				
			||||||
WiFiSSLClient wifi_client;
 | 
					WiFiSSLClient wifi_client;
 | 
				
			||||||
MqttClient mqtt_client(wifi_client);
 | 
					MqttClient mqtt_client(wifi_client);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Motor pins
 | 
					//motor control variables
 | 
				
			||||||
int motor_pin1 = 8;  // Blue   - 28BYJ48 pin 1
 | 
					 | 
				
			||||||
int motor_pin2 = 9;  // Pink   - 28BYJ48 pin 2
 | 
					 | 
				
			||||||
int motor_pin3 = 10; // Yellow - 28BYJ48 pin 3
 | 
					 | 
				
			||||||
int motor_pin4 = 11; // Orange - 28BYJ48 pin 4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Motor variables
 | 
					 | 
				
			||||||
int motor_speed = 1200;
 | 
					 | 
				
			||||||
int motor_count = 0;
 | 
					int motor_count = 0;
 | 
				
			||||||
int motor_count_max = 64;
 | 
					int motor_count_max = 64;
 | 
				
			||||||
int motor_lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
 | 
					 | 
				
			||||||
uint32_t green_led_color = carrier.leds.Color(0,255,0);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint32_t green_led_color = carrier.leds.Color(0, 255, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum state {
 | 
					void setup()
 | 
				
			||||||
  STATE_CONNECTING,
 | 
					 | 
				
			||||||
  STATE_LOGGED_OUT,
 | 
					 | 
				
			||||||
  STATE_LOGGED_IN,
 | 
					 | 
				
			||||||
  STATE_INPUT_PASSCODE,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
enum state current_state;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void setup(void)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  current_state = STATE_CONNECTING; 
 | 
					 | 
				
			||||||
	Serial.begin(9600);
 | 
						Serial.begin(9600);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Serial.println("Started");
 | 
						Serial.println("Started");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						carrier.noCase();
 | 
				
			||||||
	carrier.begin();
 | 
						carrier.begin();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	carrier.display.init(240, 240);
 | 
						carrier.display.init(240, 240);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						motor_setup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pinMode(TFT_BACKLIGHT, OUTPUT);
 | 
						pinMode(TFT_BACKLIGHT, OUTPUT);
 | 
				
			||||||
	digitalWrite(TFT_BACKLIGHT, HIGH);
 | 
						digitalWrite(TFT_BACKLIGHT, HIGH);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	carrier.display.setCursor(20, 100);
 | 
						change_state(STATE_CONNECTING);
 | 
				
			||||||
	carrier.display.setTextSize(3);
 | 
					 | 
				
			||||||
	carrier.display.print("Connecting..");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Serial.println("Connecting to WiFi...");
 | 
						Serial.println("Connecting to WiFi...");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -65,32 +51,17 @@ void setup(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	Serial.println("Connected to MQTT");
 | 
						Serial.println("Connected to MQTT");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						carrier.Buzzer.beep();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mqtt_client.subscribe("dispense");
 | 
						mqtt_client.subscribe("dispense");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	carrier.display.fillScreen(0x000);
 | 
						change_state(STATE_LOGGED_OUT);
 | 
				
			||||||
 | 
					 | 
				
			||||||
  current_state = STATE_LOGGED_OUT;
 | 
					 | 
				
			||||||
  carrier.display.setCursor(15, 100);
 | 
					 | 
				
			||||||
	carrier.display.setTextSize(2);
 | 
					 | 
				
			||||||
  carrier.display.print("Press Green Button");
 | 
					 | 
				
			||||||
  carrier.leds.begin();
 | 
					 | 
				
			||||||
  carrier.leds.fill(green_led_color, 2, 1);
 | 
					 | 
				
			||||||
  carrier.leds.setBrightness(5);
 | 
					 | 
				
			||||||
  carrier.leds.show();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  carrier.Buttons.begin();
 | 
					 | 
				
			||||||
	// Pinouts for motor - DO NOT ADD CODE AFTER THIS
 | 
					 | 
				
			||||||
	pinMode(motor_pin1, OUTPUT);
 | 
					 | 
				
			||||||
	pinMode(motor_pin2, OUTPUT);
 | 
					 | 
				
			||||||
	pinMode(motor_pin3, OUTPUT);
 | 
					 | 
				
			||||||
	pinMode(motor_pin4, OUTPUT);
 | 
					 | 
				
			||||||
  //do NOT add code after this. DON'T DO IT.
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void loop(void)
 | 
					void loop()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  carrier.Buttons.update();
 | 
						carrier.Buttons.update();
 | 
				
			||||||
  
 | 
					
 | 
				
			||||||
	// Rotate motor if needed
 | 
						// Rotate motor if needed
 | 
				
			||||||
	if (motor_count) {
 | 
						if (motor_count) {
 | 
				
			||||||
		motor_clockwise();
 | 
							motor_clockwise();
 | 
				
			||||||
@ -111,44 +82,7 @@ void loop(void)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  switch (current_state) {
 | 
						loop_state();
 | 
				
			||||||
    case STATE_LOGGED_OUT:
 | 
					 | 
				
			||||||
      if(carrier.Buttons.onTouchDown(TOUCH2)) {
 | 
					 | 
				
			||||||
        current_state = INPUT_PASSCODE;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      break;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    default:
 | 
					 | 
				
			||||||
      break;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
						delay(50);
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//motorgøgl, pls dont touch
 | 
					 | 
				
			||||||
void motor_clockwise()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	for (int i = 7; i >= 0; i--) {
 | 
					 | 
				
			||||||
		motor_set_output(i);
 | 
					 | 
				
			||||||
		delayMicroseconds(motor_speed);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void motor_anticlockwise()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	for (int i = 0; i < 8; i++) {
 | 
					 | 
				
			||||||
		motor_set_output(i);
 | 
					 | 
				
			||||||
		delayMicroseconds(motor_speed);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void motor_set_output(int out)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	digitalWrite(motor_pin1, bitRead(motor_lookup[out], 0));
 | 
					 | 
				
			||||||
	digitalWrite(motor_pin2, bitRead(motor_lookup[out], 1));
 | 
					 | 
				
			||||||
	digitalWrite(motor_pin3, bitRead(motor_lookup[out], 2));
 | 
					 | 
				
			||||||
	digitalWrite(motor_pin4, bitRead(motor_lookup[out], 3));
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								arduino/motor.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								arduino/motor.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					void motor_anticlockwise();
 | 
				
			||||||
 | 
					void motor_setup();
 | 
				
			||||||
							
								
								
									
										42
									
								
								arduino/motor.ino
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								arduino/motor.ino
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					//motorgøgl, pls dont touch
 | 
				
			||||||
 | 
					int motor_speed = 1200;
 | 
				
			||||||
 | 
					int motor_lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
 | 
				
			||||||
 | 
					// Motor pins
 | 
				
			||||||
 | 
					// Pins 8 and 9 conflict with the display
 | 
				
			||||||
 | 
					int motor_pin1 = 10; // Blue   - 28BYJ48 pin 1
 | 
				
			||||||
 | 
					int motor_pin2 = 11; // Pink   - 28BYJ48 pin 2
 | 
				
			||||||
 | 
					int motor_pin3 = 12; // Yellow - 28BYJ48 pin 3
 | 
				
			||||||
 | 
					int motor_pin4 = 13; // Orange - 28BYJ48 pin 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void motor_setup() 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						pinMode(motor_pin1, OUTPUT);
 | 
				
			||||||
 | 
						pinMode(motor_pin2, OUTPUT);
 | 
				
			||||||
 | 
						pinMode(motor_pin3, OUTPUT);
 | 
				
			||||||
 | 
						pinMode(motor_pin4, OUTPUT);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void motor_clockwise()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						for (int i = 7; i >= 0; i--) {
 | 
				
			||||||
 | 
							motor_set_output(i);
 | 
				
			||||||
 | 
							delayMicroseconds(motor_speed);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void motor_anticlockwise()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						for (int i = 0; i < 8; i++) {
 | 
				
			||||||
 | 
							motor_set_output(i);
 | 
				
			||||||
 | 
							delayMicroseconds(motor_speed);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void motor_set_output(int out)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						digitalWrite(motor_pin1, bitRead(motor_lookup[out], 0));
 | 
				
			||||||
 | 
						digitalWrite(motor_pin2, bitRead(motor_lookup[out], 1));
 | 
				
			||||||
 | 
						digitalWrite(motor_pin3, bitRead(motor_lookup[out], 2));
 | 
				
			||||||
 | 
						digitalWrite(motor_pin4, bitRead(motor_lookup[out], 3));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										9
									
								
								arduino/state.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								arduino/state.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					enum state {
 | 
				
			||||||
 | 
					  STATE_CONNECTING,
 | 
				
			||||||
 | 
					  STATE_LOGGED_OUT,
 | 
				
			||||||
 | 
					  STATE_LOGGED_IN,
 | 
				
			||||||
 | 
					  STATE_INPUT_PASSCODE,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void change_state(enum state new_state);
 | 
				
			||||||
 | 
					void loop_state();
 | 
				
			||||||
							
								
								
									
										37
									
								
								arduino/state.ino
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								arduino/state.ino
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					enum state current_state;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void change_state(enum state new_state)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						carrier.display.fillScreen(0x000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch (new_state) {
 | 
				
			||||||
 | 
							case STATE_CONNECTING:
 | 
				
			||||||
 | 
								carrier.display.setCursor(20, 100);
 | 
				
			||||||
 | 
								carrier.display.setTextSize(3);
 | 
				
			||||||
 | 
								carrier.display.print("Connecting..");
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							case STATE_LOGGED_OUT:
 | 
				
			||||||
 | 
								carrier.display.setCursor(15, 100);
 | 
				
			||||||
 | 
								carrier.display.setTextSize(2);
 | 
				
			||||||
 | 
								carrier.display.print("Press Green Button");
 | 
				
			||||||
 | 
								carrier.leds.fill(green_led_color, 2, 1);
 | 
				
			||||||
 | 
								carrier.leds.setBrightness(5);
 | 
				
			||||||
 | 
								carrier.leds.show();
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case STATE_INPUT_PASSCODE:
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						current_state = new_state;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void loop_state()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						switch (current_state) {
 | 
				
			||||||
 | 
							case STATE_LOGGED_OUT:
 | 
				
			||||||
 | 
								if (carrier.Buttons.onTouchDown(TOUCH2)) {
 | 
				
			||||||
 | 
									change_state(STATE_INPUT_PASSCODE);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user